فصل چهارم آشنایی با انواع داده ها و متغیرها برنامه هایی که تاکنون نوشته ایم به نشان دادن یک پیام یا حاصل یک عبارت بر روی صفحه نمایش محدود می شد اما در برنامه های کاربردی با داده ها و مقادیر مختلف سروکار داریم و باید بر روی آن عملیاتی را انجام دهیم. بعضی از این مقادیر مانند تاریخ تولد یک شخص یا نمره یک دانش آموز از قبل مشخص نیستند. مقدار این نوع داده ها باید در هنگام اجرای برنامه ابتدا از کاربر دریافت شوند و در مکانی از حافظه کامپیوتر نگهداری شوند و در ادامه برنامه و در جریان پردازش مورد استفاده قرار گیرند. چه حافظه ای برای نگهداری داده ها در هنگام پردازش مناسب است در این فصل با متغیرها آشنا می شویم که برای نگهداری موقتی داده ها در برنامه مورد استفاده قرار می گیرند. همچنین برای نگهداری اطالعات و نمایش آنها بر روی صفحه نمایش از متغیرها استفاده می کنیم. 58 پس از پایان این فصل انتظار می رود که فراگیر بتواند: 1 متغیر را تعریف کند و انواع متغیر را در برنامه های خود به کاربندد. 2 انواع داده ها را نام ببرد و تفاوت کاربرد هر یک را توضیح دهد. 3 میزان حافظه و محدوده انواع داده ها را بیان کند. 4 متغیرها را به طور صحیح در برنامه اعالن کندو آن ها را مقداردهی نماید. 5 شکل نمایش نقطه شناور را توضیح دهد و اعداد اعشاری را در این قالب بنویسد. 6 ازمتد ReadLine() برای دریافت داده های یک برنامه از ورودی استفاده کند. 7 بر روی رشته دریافتی از ورودی تغییراتی داده و سپس نمایش دهد. 8 از متد Parse() برای تبدیل یک رشته به یک عدد استفاده کند.
1 4 متغیر چیست در هر کامپیوتر حافظه های مختلفی وجود دارد که هر یک برای انجام کار خاصی پیش بینی شده است. یک نوع از حافظه کامپیوتر که قادر است داده ها را نگهداری کند و به سرعت قابل دسترسی است حافظه موقتی 1 RAM است. از اطالعات درون حافظه RAM در هر لحظه می توان با اطالع شد و یا در صورت لزوم محتویات آن را تغییر داد یا مقدار جدیدی را در آن ذخیره کرد. با توجه به مطالب گفته شده الزم است در یک برنامه یک یا چند مکان )بایت( از حافظه RAM کامپیوتر برای نگهداری موقتی داده ها یا نتایج حاصل از پردازش مورد استفاده قرار گیرد. در زبان های برنامه نویسی به این مکان ها متغیر 2 گفته می شود زیرا می توان محتوای آنها را در طول اجرای برنامه تغییر داد. نکته متغیر: مکانی از حافظه RAM کامپیوتر است که برای نگهداری موقتی دادهها یا اطالعات استفاده می شود متغیر را مانند یک ظرف در نظر بگیرید. در آشپزخانه ظروف متعددی با شکل ظاهری اندازه و جنس مختلفی وجود دارد که هر یک برای نگهداری یک نوع غذا یا مایعات استفاده می شود که گنجایش آن را داشته باشد. در یک برنامه نیز برای نگهداری هر یک از داده ها با توجه به نوع و بزرگی داده باید از متغیر مناسبی استفاده کنیم که بتواند داده را نگهداری کند. 2 4 روش اعالن )تعریف( و ایجاد متغیرها قبل از اینکه بتوانید مقداری را در یک متغیر ذخیره کنید باید متغیری را ایجاد کنید که قادر باشد آن مقدار را به درستی ذخیره نماید. در هنگام ایجاد متغیر باید نوع متغیر را مشخص نمایید. در زبان #C برای ایجاد و مشخص کردن نوع متغیر از الگوی زیر استفاده می شود. ;نام متغیر نوع داده int a; دستور زیر را در نظر بگیرید: 59 Var ab e Random Access Memory 2 ١
در این دستورمتغیر a از نوع عدد صحیح اعالن می شود. کلمه int نوع متغیر را مشخص می کند که قادر است اعداد صحیح را در خود نگهداری کند و a نام متغیر است. نام متغیر به وسیل ه برنامه نویس انتخاب می شود که بهتر است نام و نوع آن مطابق با داده ای باشد که مقداردهی می شود. 3 4 نوع داده 1 )نوع متغیر( نوع متغیربه طور کلی 3 ویژگی را مشخص می کند : 1 گنجایش یا ظرفیت متغیر: مثال نوع int چهار بایت است. 2 نوع اطالعاتی که در متغیر می توان ذخیره کرد: مثال در متغیر نوع int فقط اعداد صحیح و بدون ممیز قابل نگهداری است. 3 چه عملیاتی را می توان بر روی آن انجام داد: مثال عملیات ریاضی معمول را می توان روی اعداد نوع int انجام داد. در زبان #C عالوه بر نوع داده int انواع دیگری از داده ها نیز دسته بندی و گروه بندی شده اند و نحوه نمایش یا نگهداری 2 آنها در حافظه و عملیاتی که می توان بر روی آنها انجام داد از قبل مشخص و تعریف شده است و برای هر دسته یا گروه از داده ها یک نام انتخاب شده است که به آن نوع داده اولیه 3 یا درون ساخته می گویند. جدول 1 4 انواع داده و مشخصات هر یک را نشان می دهد. برای مثال در جدول 1 4 نوع داده sbyte را در نظر بگیرید. این نوع داده اعداد صحیح و بدون ممیز در محدوده 128 تا 127 را شامل می شود که یک بایت حافظه را اشغال می کند و بر روی آنها می توان عملیات ریاضی را انجام داد. اگر در یک برنامه متغیری از نوع sbyte را استفاده کنیم قادر خواهیم بود به عنوان مثال عدد 78 را در آن ذخیره کنیم. اما نمی توان عدد 200 و یا عدد 1/5 را در آن نگهداری کرد. همچنین نوع داده byte اعداد صحیحی فقط در محدوده 0 تا 255 را شامل می شود که در یک بایت قرار می گیرد. در این نوع داده فقط اعداد مثبت یا بدون عالمت 4 قابل نمایش می باشند. Data Type 1 Representat on 2 Pr m t ve Data Type or Bu t In Data Type 3 Uns gnex numbers ٤ 60
جدول 1 4 بیشترین مقدار کمترین مقدار مقدار حافظه )بایت( کاربرد نوع داده نوع داده sbyte اعداد صحیح 28 27 اعداد صحیح مثبت byte 0 255 sho t 2 اعداد صحیح 32768 32767 2 اعداد صحیح مثبت usho t 0 65535 nt 4 اعداد صحیح 2 47483648 2 47483647 4 اعداد صحیح مثبت u nt 0 4294967295 ong u ong اعداد صحیح اعداد صحیح مثبت عددی 8 8 9223372036854778508 0 9223372036854778507 844674407370955 6 5 4 اعداد اعشاری f oat 3.402823 0 38 3.402823 0 38 اعداد اعشاری با doub e دقت زیاد 8.797693 3486232 0 308.797693 3486232 0 308 اعداد صحیح بزرگ dec ma اعداد اعشاری با دقت بسیار زیاد 6 79228162514264337593543950335 7.9 0 28 79228162514264337593543950335 7.9 0 28 boo مقدار منطقی fa se t ue char str ng یک حرف یا عالمت )کراکتر( رشته غیرعددی 2 0 کد کراکتر مطابق با سیستم Un code 65535 کد کراکتر مطابق با سیستم Un code object آدرس یک داده دستور ; age byte متغیری به نام age ایجاد می کند که این متغیر بسیار کوچک و به ظرفیت یک بایت است و می تواند یکی از اعداد صفر تا 255 را در خود ذخیره کند. اگر بخواهید چند متغیر از یک نوع را تعریف کنید کافی است بعد از ذکر نوع داده نام متغیرها را با عالمت ویرگول از یکدیگر جدا کنید. مثال برای تعریف دو متغیر برای نگهداری حداقل و حداکثر درجه حرارت از دستور زیر استفاده می کنیم: Sbyte mintemp, maxtemp ; 61
نکته هر نوع داده مجموعهای از مقادیر به همراه مجموعهای از عملیات را مشخص میکند. برای اعداد صحیح و بدون ممیز نوع داده های زیر استفاده می شود: sbyte,byte, short, ushort, int, uint, long, ulong و برای اعداد اعشاری می توانید از نوع داده های float و double استفاده کنید. نوع داده float برای اعداد اعشاری با دقت حداکثر 7 رقم اعشار استفاده می شود. در صورتی که ارقام عدد بیش از آن باشد عدد گرد می شود. مثال عدد 123/456789 به صورت عدد 123/4568 قابل نگهداری است. نوع دادهdouble برای اعداد اعشاری بسیار بزرگ و یا بسیار کوچک مانند جرم و بار الکتریکی یک الکترون و با دقت زیاد 15 رقم استفاده می شود. نکته در زبان برنامهنویسی #C قبل از اینکه بتوانید دادهای را در یک متغیر ذخیره کنید باید متغیر را ایجاد )یا اعالن( کنید و در هنگام ایجاد کردن یک متغیر باید نوع متغیر)نوع داده( را مشخص نمایید. مثال mark; float 4 4 مقداردهی متغیرها پس از تعریف یا ایجاد متغیر می توانید در آن مقداری را با توجه به نوع متغیر ذخیره کنید. توجه داشته باشید که در یک متغیر همواره فقط یک مقدار نگهداری می شود و با ذخیره کردن داده جدید در یک متغیر مقدار قبلی آن از بین می رود. مقداردهی متغیرها به چند روش صورت می گیرد. با دستور زیر مستقیما مقداری در متغیر قرار می گیرد به این دستور دستور انتساب 1 می گویند. ;مقدار = نام متغیر دستورات زیر را در نظر بگیرید: byte age ; age 16 ; متغیر age از نوع عدد صحیح اعالن شده و با عدد 16 مقداردهی شده است. Ass gnment 1 62
در هنگام تعریف یا ایجاد متغیر نیز می توانید آن را مستقیما مقداردهی کنید که به آن مقداردهی اولیه 1 می گویند. الگوی آن چنین است : ;مقدار = نوع داده نام متغیر byte age 16 ; بنابراین دو دستور قبل را با الگوی باال جایگزین می کنیم: نکته 1 برای مشخص کردن اعداد مثبت نیازی به قراردادن عالمت در پشت عدد نیست. 2 در بین ارقام عدد نباید ویرگول قرار دهید تا ارقام عدد دسته بندی و جدا شوند. 3 اگر عددی را بخواهید در داخل یک متغیرذخیره کنید که خارج از ظرفیت و گنجایش آن متغیر باشد مترجم متوجه آن شده و اجازه نمی دهد. مثال دستور انتساب زیر را در نظر بگیرید: byte age 256 ; با توجه به ظرفیت متغیر age که حداکثر عدد 255 است در هنگام ترجمه این دستور خطای شکل ١ ٤ ظاهر میشود که شرح آن چنین است:»مقدار ثابت 256 را نمیتواند به یک byte تبدیل شود«. شکل 1 4 خطا در انتساب عدد صحیح 256 در یک متغیر نوع byte 63 In t a ze 1
در یک برنامه به زبان #C میتوانید اعداد صحیح را در مبنای 16 نیز بنویسید. برای این منظور قبل از عدد مورد نظر از پیشوند 0xیا 0X استفاده کنید که نشانه اعداد مبنای 16 میباشد. مثال : byte portvalue 0x1B; ushort portaddress 0X00FF; با اجرای این دستورات در متغیر portvalue عدد 27 و در متغیر portaddress عدد 255 قرار میگیرد. 1 برای مشخص کردن انواع عددی دیگر از نشانههای جدول ٢ ٤ استفاده میشود که در انتهای عدد ذکر میشود. جدول 2 4 نشانههای نوع اعداد ثابت نوع عدد نشانه مثال عدد صحیح مثبت U یا 125U u عدد صحیح بزرگ L یا 1700L l عدد صحیح بزرگ مثبت 250000UL UL عدد اعشاری با دقت معمولی F یا 2 5f f عدد اعشاری با دقت زیاد D یا 12 75d d عدد بسیار بزرگ M یا 12345678M m نکته اگر در برنامه یک عدد اعشاری بدون نشانه بنویسید این عدد به عنوان عدداعشاری با دقت زیاد در نظر گرفته می شود. برای ذخیره اعداد اعشاری باید ازمتغیرهای نوع float یا double استفاده کنید. مثال برای نگهداری نمرات درسی)معموال با دو رقم اعشار( یا اعداد گنگ مانند π باید از چنین متغیرهایی استفاده کرد. دستور زیر را در نظر بگیرید: double PI 3.141592653589793238; در این دستور برای نگهداری عدد π متغیر PI با دقت زیاد اعالن و مقداردهی شده است. 1. (1B) = (1*16)+11=27 (FF)=(15*16) + 15=255 64
نکته برای ذخیره اغلب دادهها مانند نمره یک درس متغیر نوع float مناسب است. اگر چه میتوانید از متغیر نوع double نیز استفاده کنید ولی حافظه اشغالی این متغیر دو برابر متغیر نوع float است. دستورات زیر را در نظر بگیرید: float myphysicmark; myphysicmark 17.75f; در دستورات باال برای ذخیره نمره درس فیزیک متغیری اعالن و مقداردهی شده است. سؤال: در دستور انتساب بعد از عدد اعشاری 17.75 حرف f نوشته شده است که نشانه اعداد اعشاری با دقت معمولی است.آیا میتوانید حرف f را ننویسید نکته در زبان #C هر عدد اعشاری داخل برنامه به وسیله مترجم به عنوان نوع double در نظر گرفته میشود. بنابراین اگر بخواهید یک عدد ممیزی را در یک متغیر نوع float ذخیره کنید مترجم خطا یا هشدار میدهد. برای جلوگیری از این مسئله باید از متغیرهای نوع double در هنگام کار با اعداد اعشاری استفاده کنید و یا اینکه در جلوی اعداد اعشاری حرف F یا f را بنویسید تا مترجم این عدد را به عنوان یک عدد نوع float در نظر بگیرد. ٥ 4 نشان دادن محتوای متغیرها بر روی صفحه نمایش معموال در برنامهها الزم است محتوای متغیرها که شامل دادهها و یا نتایج پردازش با اطالعات بر روی صفحه نشان داده شود تا کاربر از آنها آگاه شود. بدین منظور از متد Write() یا WriteLine() استفاده میکنیم که در فصلهای قبلی برای نمایش یک پیام یا حاصل یک عبارت به کار گرفته شد. مثال برای نشان دادن محتوای متغیر age دستور زیر را مینویسیم: byte age 16 ; System.Console.WriteLine( age ); با توجه به اینکه در متغیر age عدد 16 قرار دارد با اجرای دستور باال این عدد روی صفحه کنسول نشان داده میشود. 65
اگر شخص دیگری غیر از شما این عدد را روی صفحه مشاهده کند شاید متوجه نشود که این عدد چیست و شاید عدد 16 را به عنوان نمره در نظر بگیرد. بنابراین بهتر است قبل از نمایش هرعدد یک پیام )رشته( نیز نشان داده شود و به صورت کوتاه و مختصر منظور و مفهوم عددی را که قرار است روی صفحه نشان داده شود بیان کند. بنابراین دستور باال را به صورت زیر مینویسیم : System.Console.WriteLine(''My age is '' age ); با اجرای این دستور عبارت زیر روی صفحه نشان داده میشود: My age is 16 در دستور باال به معنای عمل جمع ریاضی نیست بلکه به منظور کنار هم قرار دادن 1 این عالمت استفاده شده است: دو مقدار )رشتهها( استفاده شده است. همان طور که در دستور زیر نیز از عالمت System.Console.WriteLine(''I am '' age ''years old.'' ); با اجرای این دستور عبارت زیر روی صفحه نشان داده میشود: I am 16 years old. مثال 1 4 استفاده از چند متغیر صحیح و اعشاری در برنامه 1 4 نشان داده شده است: class VariableDemo { static void Main() { // Declare some integer numbers variables int a 10, b 20,c ; c a b; Console.WriteLine(''a '' a); Console.WriteLine(''b '' b ); Console.WriteLine(''a b '' c); // Declare some real numbers variables float lowpi 3.141592653589793238f; double highpi 3.141592653589793238; Concatenate 1 66
// Print the results on the console Console.WriteLine(''Float PI is: '' lowpi); Console.WriteLine(''Double PI is: '' highpi); } } Console.ReadKey(); برنامه 1 4 تعریف و مقداردهی و نمایش محتوای متغیرها در برنامه 1 4 سه متغیر a, b, c از نوع عدد صحیح تعریف شده اند و در متغیر c نتیجه حاصل جمع دو عدد a و b قرار می گیرد. در دو متغیر اعشاری lowpi و highpi عدد π با دقت های مختلف نگهداری شده است. شکل 2 4 خروجی برنامه 1 4 6 4 نحوه نام گذاری متغیرها همان طور که پدر و مادر برای انتخاب یک نام خوب و مناسب برای فرزند خود وقت زیادی می گذارند و نکاتی از جمله زیبایی نام و با معنا بودن را رعایت می کنند و همچنین سعی می کنند که این نام قبال در خانواده و یا نزدیکان انتخاب نشده باشد به همان صورت برنامه نویس نیز برای متغیرها باید یک نام صحیح بامعنا و غیرتکراری در محدوده آن را انتخاب کند این کار باید با حوصله انجام شود و نام انتخابی نباید با نام های دیگر یکسان باشد. 67
در زبان #C در نام گذاری متغیرها رعایت موارد زیر الزامیاست: 1 استفاده از حروف الفبا اعداد و کاراکتر زیرخط مجاز است. 2 نام متغیر نمیتواند با عدد شروع شود. 3 نام انتخابی نمیتواند با کلمات کلیدی یا رزرو شده باشد. 4 استفاده ازعالمت فاصله و خط تیره در نام متغیر مجاز نیست. در انتخاب نام متغیرها بهتر است نکات زیر رعایت شود: نام با معنی و با توجه به کاربرد متغیر در برنامه انتخاب شود. مانند woodlength از نامهای مخفف استفاده نکنید چون خواندن آنها مشکل است.مانند crntstdnt اولین حرف نام متغیر را با حروف کوچک شروع کنید و اگر نام متغیر از چند کلمه تشکیل شده برای خوانایی حرف اول کلمات بعدی را با حروف یزرگ بنویسید.به این روش نوشتن نام کوهان شتری ١ میگویند. چند نمونه نام متغیر دو کلمهای به روش کوهان شتری را مالحظه میکنید: filename, username, notfound, localip ٣ روش دیگری برای نام گذاری متغیرها به نام روش مجارستانی ٢ به وسیله آقای چارلز سیمونیی ابداع شده که در ابتدای نام متغیر مخفف نوع داده ذکر می شود که یک روش شناخته شده و معروف برای نام گذاری متغیرها است. چند نمونه نام متغیر دو کلمه ای به روش مجارستانی را مالحظه می کنید: IntNumber, LngSalary, BlnStatus در این کتاب از روش کوهان شتری برای نام گذاری متغیرها استفاده شده است. نکته با توجه به حساسیت زبان #C به حروف کوچک و بزرگ در نام گذاری متغیرها به این نکته دقت کنید که متغیر a و A مستقل هستند. Hungar an Notat on 2 Came Notat on ١ Char es S mony 3 68
در جدول زیر تعدادی نام متغیر و علت مجاز یا غیرمجاز بودن این نام ها را می بینید. جدول ٣ ٤ نمونه متغیرهای مجاز و غیر مجاز توضیح غیر مجاز نام متغیر نباید با عدد شروع شود مجاز غیر مجاز بین کلمات نباید فاصله وجود داشته باشد مجاز غیر مجاز عالمت تعجب نباید در نام وجود داشته باشد مجاز غیر مجاز عالمت + در یک نام نباید قرار داشته باشد مجاز مجاز غیر مجاز نام نمیتواند با عدد شروع شود نام متغیر 1a a1 employee Salary First Hello! payrate one+two Conversion counter 1 2nd در دستورات زیر چند نمونه از اعالن و مقدار دهی متغیرها را مشاهده میکنید: int speed تعریف متغیر برای نگهداری سرعت خودرو با مقداردهی اولیه // ; 70 float a, b, c ; // تعریف سه متغیر برای اضالع مثلث Triangle sides ; trianglearea float // تعریف یک متغیر برای نگهداری مساحت مثلث electricalcharge; double متغیری برای نگهداری بار الکتریکی یک جسم // ٧ 4 کار با اعداد اعشاری در فیزیک و شیمیو یا به طور کلی در علوم با اعداد بسیار کوچک و بسیار بزرگ سروکار داریم. اگر بخواهید عدد اعشاری بسیار کوچک و یا بسیار بزرگی را در یک متغیر ذخیره کنید میتوانید آن را به صورت کوتاه با روشی شبیه نماد علمیبنویسید. برای اینکه با این روش آشنا شوید ابتدا الزم است روش نماد علمیرا یادآوری کنیم. در روش نماد علمی هر عدد از 2 بخش تشکیل میشود که با عالمت ضرب از یکدیگر جدا شده اند. بخش اول یک عدد اعشاری بین 1 تا 9 است )فقط یک رقم صحیح دارد( که به آن مانتیس میگویند و قسمت دوم که به صورت توانی از عدد 10 است که به آن نما گفته میشود جدول 4 ٤ (. 69
جدول 4 ٤ مثال هایی از فرم نماد علمی فرم نماد علمی فرم معمولی 4380000 4 38 10 6 5 10 65 0000265 2 47 9832 4 79832 10 1 1000000 1 10 7-5600 -5 6 10 3 1 7 4 فرم نقطه شناور: در زبان #C از یک فرم نماد علمیبرای نمایش اعداد اعشاری استفاده میشود که به آن فرم نقطه شناور 1 گفته میشود. در این فرم مانند نماد علمی عدد از دو بخش مانتیس و نما تشکیل شده است که با حرف E از یکدیگر جدا شده اند. در این فرم توان 10 بعد از حرف E نوشته میشود وخبری از عالمت ضرب بین دو قسمت نیست )جدول ٥ ٤ (. جدول 5 ٤ مثالهایی از نمایش اعداد در فرم نقطه شناور نمایش عدد در فرم نقطه شناور عدد 75 924 7 5924E1 0 18 1 8E-1 0 0000453 4 53E - 5-1 482-1 482E0 7800 0 7 8E3 بار الکتریکی یک الکترون 19 10 1/602 کولن است که در متغیرهای زیر ذخیره شده است میتوانید این عدد بسیار کوچک را در یک متغیر نوع double یا floatبه صورت نقطه شناور ذخیره کنید Double electricalcharge 1.602E 19; Float electricalcharges 1.602E 19F; سؤال:کدامیک از دستورات باالرا ترجیح میدهید چرا F oat ng po nt notat on 1 70
2 ٧ 4 دقت اعداد قابل نمایش در فرم نقطه شناور: حداکثر تعداد ارقام غیر صفر و با معنی مانتیس عدد را دقت عدد می نامند. دقت اعداد نوع ٦ float یا 7 رقم و اعداد نوع double 15 رقم است. نکته به غیر از میزان حافظه مصرفی و محدوده اعداد قابل نمایش در نوع داده های float و dou ble میزان دقت این دو نوع داده نیز با یکدیگر متفاوت است. ٨ 4 نوع داده منطقی یا بولین )bool( 1 در انتهای جدول 1 4 نوع داده منطقی یا بولین )bool( را مشاهده میکنید این نوع داده فقط شامل دو مقدار درست )true( و نادرست )false( است. متغیرهایی که از این نوع داده تعریف و ایجاد میشوند قادرند یکی از دو مقدار true و false را بپذیرند که با حروف کوچک انگلیسی نوشته میشوند. دستورات زیر متغیر response را اعالن و با false مقدار دهی اولیه میکند. سپس محتوای متغیر بر روی صفحه نمایش چاپ میشود. bool response false; System.Console.WriteLine(response ); ٩ 4 نوع داده حرفی یا کاراکتری char کاراکترعبارت است از یک حرف الفباء یا یک عالمت و یا نشانه هایی مانند آنچه که در روی دکمه های صفحه کلید مشاهده می کنید. در کامپیوتر برای هر دکمه صفحه کلید یک کد عددی در نظر گرفته می شود و در واقع هنگامی که یک کلید را فشار می دهید کدی متناظر با آن کلید تولید و این کد به صورت دنباله ای از صفر و یک در حافظه کامپیوتر ذخیره می شود. یک کاراکتر را می توانید با کد آن مشخص کنید و یا عالمت آن را در بین عالئم ' ' )تک کوتیشن( قرار دهید. چند نمونه از کاراکترها را در زیر مشاهده می کنید. 'A', 'a', '&', '$, '+', ' ' 71 Boo ean 1
نکته در داخل عالمت ها فاصله )Space( نیز به عنوان یک کاراکتر در نظر گرفته می شود. در داده کاراکتری فقط یک کاراکتر باید بین عالئم ' 'وجود داشته باشد. 72 توجه داشته باشید که در زبان برنامه نویسی# C نوع داده char به منظور کار با داده های کاراکتری پیش بینی شده است. اگر بخواهید یک کاراکتر را در یک متغیر ذخیره کنید باید متغیری از نوع داده char تعریف کنید. گنجایش این متغیر دو بایت است و کد کاراکتر را نگهداری می کند. ; نام متغیر char در دستور زیر متغیری به نام ch از نوع char تعریف و حرف A در آن ذخیره شده است. char ch 'A'; متغیر ch یک متغیر دو بایتی است که در آن کد کاراکتر نگهداری می شود. این کد دو بایتی طبق استاندارد یونیکد )Unicode( است.در استاندارد یونیکد کد هر کاراکترعددی بین 0 تا 65535 است و تمام نشانه ها عالئم و حروف الفباء زبان های مختلف کشورها به وسیله این استاندارد کدبندی شده است. این کدبندی مستقل از سیستم عامل زبان برنامه نویسی و سخت افزار است. در برنامه می توانید به جای قرار دادن کاراکتر در عالئم ' ' از کد آنها استفاده کنید چون کاراکتر ها فقط محدود به آنچه که بر روی صفحه کلید قرار دارد نیستند. بنابراین با دانستن کد هر کاراکتر می توانید آن را در برنامه استفاده کنید. معموال برای سادگی این کد را در مبنای 16 ذکر می کنند. با توجه به اینکه در کدبندی یونیکد از دو بایت استفاده می شود و هر 4 بیت یک رقم مبنای 16 است برای نمایش این کد در مبنای 16 از یک عدد 4 رقمی استفاده می شود. مثال کد کاراکتر A عدد 65 در مبنای 10 است. معادل این کد در مبنای 16 عدد 41 است. این عدد را در داخل عالئم' ' قرار می دهیم و برای مشخص کردن این عدد به عنوان کد کاراکتر قبل از آن عالمت u\ یا x\ را می نویسیم مانند الگوی زیر: 'کد 4 رقمی \u ' در دستور زیر متغیر ch اعالن و حرف A در آن ذخیره می شود. از صفرهای اضافی قبل از عدد برای تکمیل کد به صورت 4 رقمی استفاده شده است. char ch '\u0041'; // Same as Char ch 'A'
10 4 نوع داده رشته ای )String( نوع داده char تنها برای نگهداری یک کاراکتر مناسب است. برای هنگامی که داده ها مانند نام یک شخص بیش از یک کاراکتر است باید از نوع داده رشته ای )string( استفاده کنیم. یک رشته شامل تعدادی حروف و کاراکتر است که در بین جفت کوتیشن '' '' قرار گرفته است. مثال '' Mohammad ''یک داده رشته ای شامل 8 کراکتر است. 1 10 4 متغیر رشته ای: برای نگهداری داده های رشته ای در برنامه باید متغیر رشته ای تعریف کنید. متغیرهای رشته ای قادرند آدرس محلی که یک داده رشته ای وجود دارد را نگهداری کنند یا به عبارت ساده قادرند داده های رشته ای را ذخیره کنند. بنابراین با متغیری از نوع رشته قادر خواهیم بود به داده های رشته ای دسترسی داشته باشیم. دستور زیر یک متغیر رشته ای به نام name را اعالن می کند. string name; و با دستور انتساب زیر می توانید رشته ''Mohammad'' را در متغیرname ذخیره کنید و در طول برنامه به آن دسترسی داشته باشید: name ''Mohammad''; سؤال: آیا می توانید دو دستور باال را با یک دستور جایگزین کنید 2 10 4 عملیات بر روی داده ها یا متغیرهای رشته ای: عملیات مختلفی بر روی رشته ها می توان انجام داد یکی از عملیات معمول و کاربردی الحاق یا کنارهم قرار دادن رشته ها است. برای الحاق دو رشته از عالمت استفاده می شود. قطعه کد زیر را در نظر بگیرید. در این کدها محتوای متغیر رشته ای name با رشته ''Welcome'' الحاق شده و حاصل در متغیرmessage قرار می گیرد. string name ''Mohammad''; string message ''Welcome'' name; System.Console.WriteLine(message); نتیجه خروجی چنین خواهد بود: WelcomeMohammad سؤال: اگر بخواهید خروجی به صورت خوانا Welcome Mohammad شود یعنی بین دو کلمه یک فاصله قرار گیرد چه تغییری در دستورات باال ایجاد می کنید 73
نکته با توجه به این که در زبان #C عالمت هم برای عمل جمع ریاضی و هم برای الحاق رشتهها استفاده میشود در به کارگیری این عالمت در برنامه باید دقت کافی داشته باشید. کار در کارگاه ١ مثال 2 4 : برنامه زیر مانند برنامه 1 4 برای محاسبه مجموع دو عدد a و b نوشته شده است با این تفاوت که حاصل جمع در متغیری ذخیره نشده بلکه روی صفحه نمایش نشان داده می شود. به خط آخر این برنامه توجه کنید. آیا به نظر شما با اجرای این برنامه عدد 25 به عنوان حاصل جمع نشان داده می شود چرا class VariableDemo { static void Main() { // Declaretwo integer variables int a, b ; a 10 ; b 15 ; Console.WriteLine( a a); Console.WriteLine( b b ); // What is displayed? Console.WriteLine( a b a b); } } برنامه 2 4 دقت در استفاده از عالمت در هنگام کار با اعداد و رشته ها 74
در خط آخر برنامه 2 4 عالمت دو بار استفاده شده است که هر دو عالمت عمل الحاق رشته را انجام میدهند. خروجی این برنامه مطابق شکل 3 4 است: شکل 3 4 خروجی برنامه 2 4 برای رفع اشکال برنامه 2 4 خط آخر را به صورت زیر بازنویسی می کنیم: Console.WriteLine(''a b '' (a b) ); با تصحیح خط آخر نتیجه اجرای برنامه شکل 4 4 خواهد شد: شکل 4 4 خروجی برنامه 2 4 پس از تصحیح سؤال: با توجه به خروجی برنامه ٢ ٤ چرا پرانتز سبب تغییر مقدار خروجی شد 75
76 11 4 دریافت رشته تاکنون دادههای مشخص و ثابتی رادر داخل برنامه استفاده کردیم. این دادهها به وسیل ه برنامهنویس درون برنامه تعیین شده بود. حال میخواهیم برنامههای خود را کاربردی کنیم و دادهای را از کاربر دریافت کنیم. برای این منظور از متد ReadLine() استفاده میکنیم که به کاربر اجازه میدهد تا داده مورد نظر خود را از طریق صفحه کلید وارد کند. متد () ReadLineمانند متدهایی که تاکنون خوانده ایم در کالس Consoleتعریف شده است و در فضای نامی System قرار دارد. بنابراین بهصورت زیر استفاده میشود: System.Console.ReadLine(); کامپیوتر با اجرای این متد متوقف شده و منتظر دریافت داده میشود. کاربر میتواند داده مورد نظر خود را تایپ کند و در پایان دکمهEnter را بزند که در این صورت داده به صورت یک رشته در حافظه ذخیره میشود. اگر رشته دریافتی را با دستور انتساب در یک متغیر رشتهای ذخیره کنیم داده وارد شده در برنامه قابل دسترسی خواهد بود. برای مثال میخواهیم نام و نام خانوادگی یک شخص را از کاربر سؤال کرده و در برنامه استفاده کنیم. برای این منظور ابتدا دو متغیر رشتهای به نام name و family از نوع رشتهای اعالن میکنیم و سپس از متد ReadLine() برای دریافت نام و نام خانوادگی به صورت زیر استفاده مینماییم: string name, family; name System.Console.ReadLine(); family System.Console.ReadLine(); نکته متد ReadLine() شبیه متد ReadKey() است با این تفاوت که متد ReadKey() فقط منتظر دریافت یک کلید می شود اما در متد ReadLine() تا هنگامی که کلید Enter زده نشده است کامپیوتر منتظر می ماند. توجه داشته باشید وقتی کامپیوتر منتظر دریافت داده است کاربر باید بداند که چه داده ای را الزم است وارد کند )نام نمره سن ) بنابراین الزم است قبل از استفاده از متد ReadLine() یک دستور برای نمایش یک پیام و توضیحی کوتاه در مورد اینکه کامپیوتر منتظر دریافت چه داده ای است در برنامه نوشته شود. از متد Write() بدین منظور استفاده می کنیم.
مثال برای دریافت نام کاربر دستورات زیر را مینویسیم: string name ; System.Console.Write(''Enter your name:''); name System.Console.ReadLine(); کار در کارگاه 2 مثال 3 4 : نام کاربر از ورودی دریافت شده و خطاب به او پیام خوشامدگویی اعالم شود. using System; class HelloYourName { static void Main() { string name; Console.Write( Enter your name: ); name Console.ReadLine(); Console.WriteLine( Hello name); Console.Write( Press any key to exit... ); Console.ReadKey(); } } برنامه 3 4 خوشامدگویی به کاربر اگر فرض کنید که کاربر نام Ali را وارد کند خروجی برنامه به صورت شکل 5 4 خواهد بود: 77 شکل 5 4 خروجی برنامه 3 4
مثال 4 4 : می خواهیم به برنامه 3 4 دستوراتی اضافه کنیم که عالوه بر دریافت نام کاربر نام خانوادگی وی نیز سؤال شود و سپس نام ونام خانوادگی را در یک خط نمایش دهد. در برنامه 3 4 کافی است یک متغیر رشته ای به نام family تعریف کرده و از متد() ReadLine برای دریافت نام خانوادگی استفاده کنیم. برای نمایش نام و نام خانوادگی در یک خط نیز از عالمت برای الحاق رشته ها استفاده می کنیم )کدهای برجسته تغییرات جدید هستند(. using System; class HelloYourName { static void Main() { string name, family; Console.Write(''Enter your name:''); name Console.ReadLine(); Console.Write(''Enter your family:'' ); family Console.ReadLine(); Console.WriteLine(''Hello '' name '' '' family''); } } Console.Write(''Press any key to exit...''); Console.ReadKey(); برنامه 4 4 تکمیل برنامه خوشامدگویی به کاربر سؤال: خروجی برنامه تغییر یافته چه تفاوتی با شکل ٥ ٤ دارد 78
مثال 5 4 : می خواهیم برنامه ای بنویسیم که دو عدد دلخواه از کاربر دریافت کند و مجموع آن ها را حساب کرده و روی صفحه نمایش نشان دهد. برای دریافت داده ها از کاربر از متد ReadLine() مانند مثال های قبلی استفاده می کنیم. داده های دریافتی به وسیله این متد در قالب رشته در حافظه ذخیره می شوند بنابراین برای دسترسی به آن ها باید از متغیرهای رشته ای استفاده کنیم. using System ; class GetNumbers { static void Main() { string firstnumber, secondnumber; Console.Write(''Enter a number:'' ); firstnumber Console.ReadLine(); Console.Write(''Enter another number:'' ); secondnumber Console.ReadLine(); Console.WriteLine(''Total '' (firstnumber secondnumber) ); } } Console.Write( Press any key to exit... ); Console.ReadKey(); برنامه 5 4 اولین تالش برای دریافت داده های عددی با اجرای این برنامه پنجره ای ظاهر می شود که از کاربر خواسته می شود که یک عدد وارد کند )شکل 6 ٤ (. 79
شکل 6 4 خروجی برنامه 5 4 دریافت یک عدد پس از وارد کردن یک عدد و زدن دکمه Enter عدد دیگری خواسته می شود. فرض کنید اعداد 13 و 77 توسط کاربر وارد شود )شکل 6 ٤ (. شکل 7 4 خروجی برنامه 5 4 سؤال:کاربر با وارد کردن دو عدد 13 و 77 انتظار داشت که مجموع آنها یعنی عدد 90 روی صفحه نشان داده شود اما به جای آن عدد 1377 نشان داده شد. چرا همان طور که بیان شد متد ReadLine() داده دریافتی را به صورت یک رشته در حافظه ذخیره می کند و در برنامه 5 4 از متغیرهای رشته ای firstnumber و secondnumber برای دسترسی به داده های ورودی استفاده کردیم. بنابراین عالمت در دستور زیرعمل الحاق دو رشته مثال '' 13 ''و ''77'' را انجام می دهد و طبیعی است که نباید انتظار عمل جمع ریاضی داشته باشیم. 80
1 11 4 دریافت اعداد: با توجه به این که داده های دریافتی به وسیله متد ReadLine() همواره به صورت رشته تحویل داده می شود باید به وسیله دستوری رشته دریافتی را به عدد تبدیل کنیم. بنابراین به متدی نیاز داریم که بتواند یک رشته شامل ارقام را به ارزش عددی تبدیل کند تا بتوانیم روی آنها محاسبات ریاضی انجام دهیم. خوشبختانه برای انواع داده های عددی متدی به نام Parse() از قبل تعریف شده است که می تواند از یک رشته شامل ارقام معادل عددی آن را بدست آورد. مثال برای تجزیه رشته '' 259 ''به ارزش عددی با توجه به این که درون رشته یک عدد صحیح قرار دارد از متد Parse() مربوط به نوع داده int استفاده می کنیم: int.parse(''259''); نکته به عمل بررسی کاراکتر به کاراکتر یک رشته برای جدا کردن و بدست آوردن یک مقدار با معنی تجزیه کردن 1 می گویند. حاصل اجرای این متد عدد 259 است که باید در یک متغیر نوع صحیح ذخیره شود. بنابراین استفاده مفید از این متد به صورت زیر خواهد بود: int a ; a int.parse(''259''); میتوانید دو دستور باال را با دستور زیر جایگزین نمایید: int a int.parse(''259''); اگر رشتهای حاوی عدد اعشاری باشد باید از متد () Parseمربوط به نوع داده اعشاری مثالfloat یا double استفاده کنید.مثال برای تبدیل رشته'' 2.50 '' به عدد 2.5 از دستورات زیر استفاده میکنیم: float b ; b float.parse( 2.50 ); با استفاده از متد Parse() میتوانیم رشته دریافتی که به وسیله متد ReadLine() از کاربر گرفته شده است را به عدد تبدیل کنیم به شرط اینکه حاوی اعداد باشد. string input; float number; input Console.ReadLine(); number float.parse(input); Parse 1 81
همچنین میتوانید متد ReadLine() را مستقیما در متد Parse() استفاده کنید که در این صورت نیازی به متغیر رشتهای نیست: float number; number float.parse(console.readline()); سؤال: آیا میتوانید دو دستور باال را باز هم خالصهتر کنید کار در کارگاه 3 مثال 6 4 : با تکمیل برنامه 5 4 مجموع دو عدد دریافتی را چاپ نمایید. using System ; class GetNumbers { static void Main() { string input; float firstnumber, secondnumber; Console.Write(''Enter a number:''); input Console.ReadLine(); firstnumber float.parse(input); Console.Write(''Enter another number:''); input Console.ReadLine(); secondnumber float.parse(input); Console.WriteLine(''Total '' (firstnumber secondnumber)); } } Console.WriteLine( Press any key to continue... ); Console.ReadKey(); برنامه 6 4 دریافت دو عدد و محاسبه مجموع 82
نتیجه اجرای برنامه در شکل 8 4 نشان داده شده است: شکل 8 4 خروجی برنامه 6 4 برنامه های زیر را در محیط VS ایجاد کنید. 1 دستورات زیر را در داخل متد Main() برای شناسایی انواع متغیرها بنویسید. با اضافه کردن دستورات WriteLine() محتوای متغیرها را بر روی صفحه نمایش نشان دهید. // Declare and initialize some variables // Use long suffix. long alongnumber 10000L; // Use double suffix. double adoublenumber 123.764D; // Use float suffix. float afloatnumber 100.50F; // Use unsigned suffix. uint anunsignednumber 1000U; // Use decimal suffix. decimaladecimalnumber 4000.1234M; // Use unsigned suffix and long suffix. ulonganunsignedlong 10002000300040005000UL; 83
84 ٢ برنامه شماره 4 4 )خوشامدگویی به کاربر( را با داده های مختلف )نام خود نام همکالسی ها( آزمایش کنید. 3 برنامه شماره 6 4 )دریافت دو عدد و محاسبه مجموع( را با اعداد صحیح و اعشاری آزمایش کنید.
خودآزمایی فصل چهارم ١ چه نوع حافظه کامپیوتر برای نگهداری حجم کمی از داده ها در طول اجرای یک برنامه مناسب است ٢ در زبان های برنامه نویسی مکانی از حافظه برای نگهداری موقتی داده واطالعات... نامیده می شود. ٣ منظور از نوع داده چیست ٤ نوع متغیر چه ویژگی هایی را نشان می دهد ٥ تفاوت های بین نوع داده float و double را نام ببرید. ٦ برای نگهداری هر یک از داده های زیر در برنامه یک متغیر مناسب تعریف کنید. الف( سن افراد ت( ظرفیت یک هارد دیسک امروزی ب( درجه حرارت محیط اتاق ث( جمعیت یک کشور پ( حقوق کارمند ج( وضعیت خاموش و روشن بودن یک المپ ٧ تحقیقی کوتاه بر روی روش نام گذاری مجارستانی Notation( )Hungarian با استفاده از اینترنت داشته باشید. با توجه به محیط های برنامه نویسی )IDE( پیشرفته مانند ویژوال استودیو نشان دهید که دیگر نیازی به ذکر نوع داده در ابتدای نام متغیر که در روش مجارستانی استفاده می شود وجود ندارد. ٨ شکل زیر چه روشی را برای نام گذاری متغیرها نشان می دهد نام این روش چیست ٩ چرا در هنگام ترجمه دستور زیر خطا ظاهر می شود چگونه این خطا را برطرف می کنید short value 66000 / 2 ; 85
١٠ در جدول زیر کدامیک از نام های متغیر غیر مجاز است و یا مناسب نیستند. آنها را تصحیح کنید. )اولین ردیف جدول برای شما پاسخ داده شده است.( نام پیشنهادی شما نام متغیر غیرمجاز نامناسب مجاز کاربرد متغیربا توجه به معنی آن نام متغیر networkok وضعیت شبکه 29yesitsme mycurrentid intvalue 8%tax woodlength glassarea width height MySalary employeesalary 11 کدامیک از داده های زیر یک داده کاراکتری محسوب می شود برای پاسخ خود دلیل بیاورید. '! ', 'abc', '+', '!', '&', '1', '12', '08' 12 در زبان #C برای دریافت داده از ورودی از متد... و برای نمایش اطالعات در خروجی از متد... استفاده می کنیم. 86
13 اعداد زیر را در متغیرهای مناسب با استفاده از روش نقطه شناور جای دهید. الف( عمر زمین بر حسب سال 4,600,000,000 ب( فاصله زمین تا خورشید 149,600,000,000 متر است. پ( اندازه جرم یک اتم کربن )جرم اتمی( برابر با kg 0/00000000000000000000000000166 14 با توجه به اینکه الزم نیست مانتیس بین 0 تا 1 باشد جدول زیر را تکمیل کنید. گونه دیگری از فرم نقطه شناور نمایش عدد در فرم نقطه شناور عدد 75 924 7 5924E1 0 18 1 8E-1 0 0000453 4 53E-5-1 482-1 482E0 7800 0 7 8E3 15 در برنامههای صفحه گسترده اعداد بزرگ به صورت نقطه شناور نیز نمایش داده میشوند. وارد برنامه اکسل شوید و عدد بزرگی را وارد نموده و کلید Enter را بزنید. چه عددی روی صفحه نشان داده میشود پس از مشاهده فرم نقطه شناور سعی کنید با تغییر فرمت سلول مربوطه عدد را به صورت معمولی نشان دهید. 87
16 کدام یک از دستورات زیر می تواند مجموع دو عدد a و b را به طور صحیح نشان دهد نتیجه اجرای هر یک از دستورات را نیز بنویسید. int a 10, b 20; System.Console.WriteLine(''a'' + ''b''); System.Console.WriteLine(''a + b''); System.Console.WriteLine(a + b); System.Console.WriteLine(''a + b''+a + b); 17 سؤال زیر به زبان انگلیسی است. آن را خوانده و پاسخ صحیح را انتخاب کنید. The C# method that prints a line of output on the screen and then positions the cursor on the next line is... A) println() C) WriteLine() B) DisplayLine() D) Write() تمرینات برنامه نویسی فصل چهارم 1 برنامه ای بنویسید که دو عدد از کاربر دریافت نماید و حاصل جمع و حاصل تفریق آنها را نمایش دهد. )اعداد ورودی ممکن است صحیح و یااعشاری باشد.( 2 برنامه ای بنویسید که نام و نام خانوادگی و سن کاربر را دریافت کند و سپس اطالعات دریافتی را با رنگ های دلخواه روی صفحه نمایش نشان دهد. 3 با استفاده از یک برنامه ساده شامل متد WriteLine() رشتهها یا کاراکترهای جدول زیر را نمایش دهید تا بتوانید معادل آنها را پیدا کرده و جدول را کامل کنید. معادل کد حرف یا رشته معادل کد حرف یا رشته '\u0007' ''b\u0061ck'' 'u000a\' ''12'' + ''8'' ''0\u00200'' ''C\u0023'' '\u0040' '\u0030' 88
واژگان و اصطالحات انگلیسی فصل چهارم ردیف واژه انگلیسی معنی به فارسی ١ Assignment ٢ Boolean ٣ Built-In Data Type ٤ Camel Notation ٥ Concatenate ٦ Floating point notation ٧ Hungarian Notation ٨ Initialize ٩ Integer Numbers ١ Precision ١١ Primitive Data Type ١٢ Random Access Memory ١٣ Representation ١٤ Significant digits ١٥ Unsigned numbers ١٦ Variable 89